package org.jeecg.modules.file.service.impl;

import org.jeecg.modules.file.entity.File;
import org.jeecg.modules.file.mapper.FileMapper;
import org.jeecg.modules.file.service.IFileService;
import org.jeecg.modules.file.util.FileConvertUtil;
import org.jeecg.modules.file.util.SmartStringUtil;
import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;



/**
 * @Description: 文件管理
 * @Author: jeecg-boot
 * @Date:   2023-09-22
 * @Version: V1.0
 */
@Service
public class FileServiceImpl extends ServiceImpl<FileMapper, File> implements IFileService {

    @Override
    public void onlinePreview(String url, HttpServletResponse response) throws Exception {
        // 获取文件类型

        String[] str = SmartStringUtil.split(url, "\\.");

        if (str.length == 0) {
            throw new Exception("文件格式不正确");
        }
        String suffix = str[str.length - 1];
        if (!"txt".equals(suffix) && !"doc".equals(suffix) && !"docx".equals(suffix) && !"xls".equals(suffix)
                && !"xlsx".equals(suffix) && !"ppt".equals(suffix) && !"pptx".equals(suffix)&& !"pdf".equals(suffix)) {
            throw new Exception("文件格式不支持预览");
        }
        try {
            InputStream in = FileConvertUtil.convertNetFile(url, suffix);
            OutputStream outputStream = response.getOutputStream();
            // 创建存放文件内容的数组
            byte[] buff = new byte[1024];
            // 所读取的内容使用n来接收
            int n;
            // 当没有读取完时,继续读取,循环
            while ((n = in.read(buff)) != -1) {
                // 将字节数组的数据全部写入到输出流中
                outputStream.write(buff, 0, n);
            }
            // 强制将缓存区的数据进行输出
            outputStream.flush();
            // 关闭流
            outputStream.close();
            in.close();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }


    }
}
